Joining IBM-1130 Cobol and Fortran-EMU compilers

The Disk Operating System of the IBM-1130 computer was distributed in large punched card decks comprised of several "modules" marked with signs written at hand in the cards edge, like "OS", "Fortran", "Cobol", "Rpg", "Assembler", "Fortran Lib.", etc. This deck was placed in the computer card reader preceded by an Initial Program Load card that load and execute a small program placed after it, that in turn load and execute the system disk loader. After the whole card deck was processed, an OS disk ready to be used was obtained. However, the FORTRAN-IV compiler provided by IBM was not a complete implementation of such language version, so it lacks support for LOGICAL data type, a frequently used feature. For an unknown reason, IBM never released a compiler update that fixed this point.

As frequently happens in cases like this one, the IBM-1130 FORTRAN compiler was modified by an educative institution, the Eastern Michigan University, that updated it to a full FORTRAN-IV version plus some additional features, like extending variable names to 6 characters. This compiler, called "FORTRAN-EMU", was distributed for free as a large punched cards deck to any university that had an IBM-1130 computer. The CECAFI certainly received a copy. However, unlike the IBM cards deck, the FORTRAN-EMU deck have not a single indication written. After the whole cards deck was processed, a system disk with just FORTRAN-EMU compiler and Assembler was obtained. This means that COBOL and RPG compilers were not included in the FORTRAN-EMU distribution deck. In the Facultad de Ingeniería there were different programming language courses oriented to several areas, and COBOL was used in a few of they. As result of this situation, school students that used COBOL language usually needs to wait until a large number of COBOL programs accumulated in the computer services desk, because their processing required a disk change and it was not convenient to frequently do that. However, when a faculty class that used COBOL had exams, CECAFI gave priority to them, so in this case were FORTRAN users the ones that had to wait. When I entered CECAFI several attempts was did already trying to join FORTRAN-EMU and IBM COBOL compilers in the same disk, with no success.

The logical method to achieve this modification was to get the COBOL compiler module from IBM original cards deck and try to add it to the FORTRAN-EMU system disk, but for some reason this method not worked as expected. I studied this problem in the IBM-1130 OS documentation trying to understand the reason. IBM-1130 system disks were divided in three zones: the "System Area", that store the Operating System and the compilers; the "User Area", that store the libraries used by the compilers; and the rest of the disk was "Working Storage", used by the compilers when create executable code. After a successful compilation, the executable program just created could be passed from Working Storage to User Area (that just imply to move the end of UA after that program), converting it into an user library or user program. At beginning of System and User Areas there were their directories, called "Fixed Logical Equivalence Table" (FLET) for the System Area, and the same term without "Fixed" word for the User Area (LET).

Standard IBM-1130 system disk layout

     /    SYSTEM   AREA    \ /    USER   AREA    \ / Working Storage \
    ┌─┬───┬───┬───┬───┬───┬─┬─┬───┬───┬───┬───┬───┬───────────────────┐
    │F│   │   │   │   │   │ │ │   │   │   │   │   │                   │
    │L│O S│FOR│COB│RPG│ASM│ │L│For│Cob│Asm│Usr│Usr│                   │
    │E│   │   │   │   │   │ │E│Lib│Lib│Lib│Lib│Prg│                   │
    │T│   │   │   │   │   │ │T│   │   │   │   │   │                   │
    └─┴───┴───┴───┴───┴───┴─┴─┴───┴───┴───┴───┴───┴───────────────────┘
             Cushion Area: ^

Between the last module in the System Area and the LET may be a small space, called "Cushion Area", that was inserted as a filler space just to made the User Area start at a disk sector boundary; however, this area may grow if a compiler would be deleted from the System Area. When I analyzed the FORTRAN-EMU disk, I discovered that it was created with just FORTRAN compiler and Assembler, and a very small Cushion Area that was not enough to receive COBOL compiler, even if the Assembler would be deleted.

FORTRAN-EMU system disk layout

     / SYSTEM AREA \ /USER A.\ /          Working   Storage          \
    ┌─┬───┬───┬───┬─┬─┬───┬───┬───────────────────────────────────────┐
    │F│   │   │   │ │ │   │   │                                       │
    │L│O S│FOR│ASM│ │L│For│Asm│                                       │
    │E│   │EMU│   │ │E│Emu│Lib│                                       │
    │T│   │   │   │ │T│Lib│   │                                       │
    └─┴───┴───┴───┴─┴─┴───┴───┴───────────────────────────────────────┘
     Cushion Area: ^

The Disk Utility Program (DUP) provided with the OS allowed to get individual parts of the User Area and pass they to punched card decks; however, this was not possible with OS parts taken from the System Area. If this feature would be allowed this problem could be easily solved, because we could pass the FORTRAN-EMU compiler into a punched cards deck and use it to replace the FORTRAN module in the IBM original deck. On the other hand, the FORTRAN-EMU cards deck had not any format; unlike the standard IBM disk, it was created as a disk image file with not a recognizable division.


The OS documentation specified the places in disk where all the configuration parameters were stored at fixed locations. This include the size of the System Area (that also indicated the position of the LET) and the size of the Cushion Area. With this information I wrote a small assembly program designed to modify certain places of the disk with specific values. This program allowed me to join in the same disk the FORTRAN-EMU and IBM COBOL compilers via the following procedure:

  1. The first step was to create a FORTRAN-EMU system disk as shown in the last scheme above.
  2. Both FORTRAN-EMU and Assembler libraries were passed to punched card decks. This step just needs to be performed once.
  3. My program was executed and modified the disk configuration parameters this way:
    1. The size of the System Area was increased in a way that the Cushion Area had enough space to receive the COBOL compiler.
    2. At the new position of the User Area an empty LET was initialized. Of course, this step caused that the original FORTRAN-EMU and Assembler libraries were lost.

    FORTRAN-EMU disk after my modification

         /  SYSTEM  AREA  \ U /            Working   Storage             \
        ┌─┬───┬───┬───┬────┬─┬────────────────────────────────────────────┐
        │F│   │   │   │    │ │                                            │
        │L│O S│FOR│ASM│    │l│                                            │
        │E│   │EMU│   │    │e│                                            │
        │T│   │   │   │    │t│                                            │
        └─┴───┴───┴───┴────┴─┴────────────────────────────────────────────┘
         Cushion Area: ^^^^
    
  4. The FORTRAN-EMU and Assembler libraries were recovered in the User Area via the punched card decks created in step # 2.
  5. Finally, the COBOL compiler was loaded in the System Area, that now have enough available space for it. This was achieved using the "COBOL" module from the original IBM punched cards deck.

I vividly remember the large number of punched cards that this method required and the long time their processing tooks. The then CECAFI's boss, Lic. Heriberto Olguín Romo, told me that other institutions that had IBM-1130 computers were very interested in this solution and asked for my permission to share it. Although I accepted, this solution was not used in any other IBM-1130 computer as far as I know.